Computing systems often include one or more host computers (“hosts”) for processing data and running application programs, direct access storage devices (DASDs) for storing data, and a storage controller for controlling the transfer of data between the hosts and the DASD. Storage controllers, also referred to as control units or storage directors, manage access to a storage space comprised of various types of media (e.g., hard disk drives, otherwise referred to as a Direct Access Storage Device (DASD), solid state disks, flash memory, etc.). Hosts may communicate Input/Output (I/O) requests to the storage space through the storage controller.
Writes may update data, write new data, or write the same data again. To assist in recovery of data writes, a copy of data may be provided at a remote location. Such copies may also be referred to as dual or shadow copies.
Remote mirroring systems provide techniques for mirroring data in order to facilitate recovery after a system failure. Such data shadowing systems can also provide an additional remote copy for non-recovery purposes, such as local access at a remote site.
In remote mirroring systems, data is maintained in volume pairs. A volume pair includes a volume in a primary storage device and a corresponding volume in a secondary storage device that includes a copy of the data maintained in the primary volume.
Single direction synchronous mirror technology has the target volume write disabled to ensure that the target volume has the same data as the source volume. Allowing synchronous mirroring in both directions means that both the source volume and the target volume may be enabled for writes originating at that volume. That is that both volumes would be both a source volume and a target volume. Thus, both volumes continue to be a mirror image of each other.
An application program may attempt to write at the same location and the same time on both volumes. This case is called a “collision”.
With the advent of newer applications that coordinate themselves to partition volumes themselves to prevent collisions and/or handle the reject of a write internally, the likelihood of collisions is less and the consequences are less severe for those applications that are coded to handle and re-drive writes when a collision occurs.